---
--- Created by heiye.
--- DateTime: 2025/9/4 下午6:43
---

-- 操作的 Key
local key = KEYS[1]
-- 获取传入的成员
local member = ARGV[1]
-- 获取传入的分数
local score = ARGV[2]

-- 检查 ZSet 是否存在
if redis.call('EXISTS', key) == 0 then
    -- 若不存在，直接 return
    return -1
end

-- 1. 先获取当前 ZSET 的元素数量
local currentSize = redis.call('ZCARD', key)

-- 2. 如果 ZSET 元素数量小于 50，直接添加
if currentSize < 50 then
    redis.call('ZADD', key, score, member)
    return 0
end

-- 3. 如果已经达到 50 个元素，需要判断分数
-- 获取当前最低分数的元素
local lowestScores = redis.call('ZRANGE', zsetKey, 0, 0, 'WITHSCORES')
local lowestScore = lowestScores[2]
local lowestId = lowestScores[1]

-- 4. 如果新评论的分数高于最低分数，进行替换
if score > lowestScore then
    -- 先移除最低分数的元素
    redis.call('ZREM', zsetKey, lowestId)
    -- 添加新元素
    redis.call('ZADD', zsetKey, commentScore, commentId)
end

return 0
